<?php
/* 森亮号航海见识Flickr ID扩展
 * 用于索引化以及将来可替换性方案
 * 调用方法<flickr img="http:/xxxx/xxx_c.jpg" desc="一些辅助信息" user="slboat" alt="标题信息啥的">4545</flickr>
 * 如果直接提供点击链接那么就是<flickr img="http:/xxxx/xxx_c.jpg" desc="一些辅助信息" link="http://ssss///sss" alt="标题信息啥的">4545</flickr>

 * 指定的user是用户名，如果有link可以不需要它
 */

# 注册扩展信息
$wgExtensionCredits['parserhook'][] = array(
    'path' => __FILE__,
    'name' => 'FlickrPic',
    'author' => 'Sen',
	'version' => '1.0.1',
    'url' => 'http://see.sl088.com/wiki/%E6%89%A9%E5%B1%95:SLboat_Flickr_Pic',
    'description' => '森亮号航海见识Flickr ID扩展' //或许可以多语言？
);

// 初始化钩子
$wgHooks['ParserFirstCallInit'][] = 'initFlickrPic';

/* todo: 或许一天后，它变成一个class啥子的，看起来更多文件 */

/**
 * 绑定 <flickr> 标记
 * @参数传递给 $parser
 * @返回布尔真
 * 这里的写法完全参考自Poem扩展
 */
function initFlickrPic(&$parser)
{
    $parser->setHook('flickr', 'renderFlickr');
    return true;
}

/**
 *  渲染Flickr的标记得到HTML标记
 * @参数字符 $id 就是中间标记的id，如果空的话应该是null
 * @参数数组 $param
 * @父级的参数传递信息 $parser，看起来这里用不上
 * @参数布尔值 $frame - 是啥子，这里用不上
 * @返回字符串 string，也就是html代码吧
 */
function renderFlickr($id, $param = array(), $parser = null, $frame = false)
{
    $imgurl = isset($param['img']) ? $param['img'] : ""; //获得图片地址，必须的
    if ($imgurl == "" ) {
		// todo: 更友善一些的提醒
		// todo: 效验是否为flickr的图片地址
        return "遗憾！指定的图片地址无效，Flickr图片ID：".$id;
    }
    $link  = isset($param['link']) ? Htmlspecialchars($param['link']) : ""; // 是否提供了完整的连接信息

    $user = isset($param['user']) ? $param['user'] : "slboat"; //默认的用户名slboat
    $desc = isset($param['desc']) ? Htmlspecialchars($param['desc']): ""; // 默认描述信息
    $alt  = isset($param['alt']) ? Htmlspecialchars($param['alt']) : "SLboat Seeing..."; // 默认alt信息

    $id = Htmlspecialchars($id); //过滤一下啥子
    
    //基础的图片 - 用打印一样的，真够C
    $result = sprintf(': <img class="flickr_pic" alt="%s"  src="%s" />', $alt, $imgurl); //基本的图片
    //这里是点击链接
	if ($link != "" && strpos($link,"flickr")){
		//todo: 效验是否为flickr的链接，不效应大小写，不要太敏感
		$hreflink=$link;
	}else{
		//todo: 当$id是null的时候不输出这个
		// 自动尝试填充地址
		$hreflink=sprintf("http://www.flickr.com/photos/%s/%s/",$user, $id);
	}
	//根据备注处理两种情况
	if ($desc != ""){ //当有描述取消图片链
		//todo: 或许重新调整磁铁，为了更好看的连接
		//将来：可以动态获得标记，听起来如何，会有一些效率损失是的
		//写入描述标记
		$result = $result . sprintf('<br/><span class="flickr_desc">%s - <a href="%s" target="_blank" rel="nofollow">Flickr页面</a></span>', $desc, $hreflink);
	}else{
		/* 旧的连接 */
		//$result = $result . sprintf('<a target="_blank" rel="nofollow" class="flickr_link" href="%s">Link</a>', $hreflink);
		//图片链接，其实也可以用CSS填补背景
		$link_img = "http://see.sl088.com/w/images/9/99/Flickr_link.png";
		$result = $result . sprintf('<a target="_blank" rel="nofollow" href="%s"><img class="flikcr_link_pic" src="%s"></a>', $hreflink, $link_img);
	}

    //返回附注信息咯
    return $result; //试试看
}